package com.tbb.app.base.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tbb.app.base.dto.UserAddDTO;
import com.tbb.app.base.dto.UserCurUpdateDTO;
import com.tbb.app.base.dto.UserPasswordDTO;
import com.tbb.app.base.dto.UserUpdateDTO;
import com.tbb.app.base.entity.User;
import com.tbb.app.base.search.UserPageSearch;
import com.tbb.app.base.vo.UserVO;

import java.util.List;

/**
 * 用户表 服务类
 *
 * @author Liu
 * @since 2022-01-11
 */
public interface IUserService extends IService<User> {

    /**
     * 登录
     *
     * @param account
     * @param password
     * @return
     */
    String login(String account, String password);

    /**
     * 登出
     */
    void logout();

    /**
     * 分页查询
     *
     * @param search
     * @param saveHistory
     * @return
     */
    IPage<UserVO> page(UserPageSearch search, boolean saveHistory);

    /**
     * 新增用户
     *
     * @param dto
     * @return
     */
    void add(UserAddDTO dto);

    /**
     * 编辑用户
     *
     * @param dto
     * @return
     */
    void update(UserUpdateDTO dto);

    /**
     * 重置密码
     *
     * @param userId
     */
    void reset(String userId);

    /**
     * 管理授权
     *
     * @param userId
     * @param type
     */
    void admin(String userId, int type);

    /**
     * 根据ids获取
     *
     * @return
     */
    List<User> getByIds(List<String> ids);

    /**
     * 获取搜索历史
     *
     * @return
     */
    List<String> listSearch();

    /**
     * 列表查询已关注用户
     *
     * @return
     */
    List<UserVO> listFollow();

    /**
     * 查询用户详情
     *
     * @param userId
     * @return
     */
    UserVO detail(String userId);

    /**
     * 修改密码
     *
     * @param dto
     */
    void updatePassword(UserPasswordDTO dto);

    /**
     * 清空搜索历史
     */
    void deleteSearch();

    /**
     * 编辑当前用户
     *
     * @param dto
     */
    void update(UserCurUpdateDTO dto);

    /**
     * 检查是否是管理员
     */
    void checkAdmin();

    /**
     * 根据昵称和账号获取ids
     *
     * @param name
     * @param account
     * @return
     */
    List<String> listByNameAndAccount(String name, String account);
}
